<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyftpdlib Release Notes</title>
</head>

<body>
<div id="wikicontent">
  <div id="wikicontent2">
    <h1><a id="Version:_0.4.0_-_Date:_2008-05-16">Version: 0.4.0 - Date: 2008-05-16</a></h1>
    <h2><a id="Major_enhancements">Major enhancements</a></h2>
    <ul>
      <li><a title="Assume the id of real users when using system dependent authorizers" href="http://code.google.com/p/pyftpdlib/issues/detail?id=65">Issue 65</a>: it is now possible to assume the id of real users when using system dependent authorizers. </li>
      <li><a title="Add IPv6 support to pyftpdlib [RFC-2428]" href="http://code.google.com/p/pyftpdlib/issues/detail?id=67">Issue 67</a>: added IPv6 support (<a href="http://www.faqs.org/rfcs/rfc2428.html" rel="nofollow">RFC-2428</a>). </li>
    </ul>
    <h2><a id="Bugfixes">Bugfixes</a></h2>
    <ul>
      <li><a title="Issue when authenticating as anonymous using user-defined authorizers" href="http://code.google.com/p/pyftpdlib/issues/detail?id=64">Issue 64</a>: issue when authenticating as anonymous user using user-defined authorizers. </li>
      <li><a title="WinNTAuthorizer does not determine the real user home directory" href="http://code.google.com/p/pyftpdlib/issues/detail?id=66">Issue 66</a>: WinNTAuthorizer does not determine the real user home directory. </li>
      <li><a title="DummyAuthorizer incorrectly uses class attribute instead of instance attribute for user_table dictionary" href="http://code.google.com/p/pyftpdlib/issues/detail?id=69">Issue 69</a>: DummyAuthorizer<a href="http://code.google.com/p/pyftpdlib/w/edit/DummyAuthorizer">?</a> incorrectly uses class attribute instead of instance attribute for user_table dictionary. </li>
      <li><a title="Wrong NOOP response code" href="http://code.google.com/p/pyftpdlib/issues/detail?id=70">Issue 70</a>: wrong NOOP response code. </li>
    </ul>
    <h2><a id="API_changes_since_0.3.0">API changes since 0.3.0</a></h2>
    <ul>
      <li><a id="API_changes_since_0.3.0">impersonate_user() and terminate_impersonation() methods have been added to the DummyAuthorizer class. </a></li>
    </ul>
    <h2><a id="Migration_notes">Migration notes</a></h2>
    <p><a id="Migration_notes">Changes  applied to the 0.4.0 trunk are fully compatible with the previous 0.3.0  version. Your existing 0.3.0 based code will most likely work without  need to be modified. The new features in this release are detailed  below. </a></p>
    <h3><a id="IPv6">IPv6</a></h3>
    <p><a id="IPv6">Starting from version 0.4.0 pyftpdlib supports IPv6 (</a><a href="http://www.faqs.org/rfcs/rfc2428.html" rel="nofollow">RFC-2428</a>). If you use IPv6 and want your FTP server to do so just pass a valid IPv6 address to the FTPServer class constructor which now accepts both IPv4 and IPv6 address types. Example: </p>
    <pre>&gt;&gt;&gt; from pyftpdlib import ftpserver<br />&gt;&gt;&gt; address = (&quot;::1&quot;, 21)  # listen on localhost, port 21<br />&gt;&gt;&gt; ftpd = ftpserver.FTPServer(address, ftpserver.FTPHandler)<br />&gt;&gt;&gt; ftpd.serve_forever()<br />Serving FTP on ::1:21</pre>
    <h3><a id="Real_users_impersonation">Real users impersonation</a></h3>
    <p><a id="Real_users_impersonation">Two new methods have been added to the original DummyAuthorizer class: impersonate_user() and terminate_impersonation(). <br />
    </a><a id="Real_users_impersonation">System  dependent authorizers subclassing the dummy authorizer can now assume  the id of real users by overriding them as necessary. <br />
    </a><a id="Real_users_impersonation">Every  time the FTP server is going to access the filesystem (e.g. for  creating or renaming a file) it will temporarily impersonate the  currently logged on user, execute the filesystem call and then switch  back to the user who originally started the server. <br />
    </a><a id="Real_users_impersonation">Example UNIX and Windows FTP servers contained in the </a><a href="http://code.google.com/p/pyftpdlib/source/browse/tags/release-0.4.0/demo/" rel="nofollow">demo directory</a> implement real user impersonation. </p>
  </div>
  <p>&nbsp;</p>
</div>
</body>
</html>
